<html>
   <head>
      <link rel="stylesheet" type="text/css" href="style.css" />
   </head>
   <body onload="">
<h2 class="comptitle">Simple Module <i>BaseOverlay</i></h2>
<b>Package:</b> oversim.common<br/><b>File: <a href="src-common-BaseOverlay.ned.html">src/common/BaseOverlay.ned</a></b><br/><p><a href="../doxy/classBaseOverlay.html" target="mainframe"><b>C++ definition</b></a></p>

<p>Base class for overlay implementations</p>
<p><b>Author:</b> Ingmar Baumgart, Bernhard Heep, Stephan Krause, Sebastian Mies</p>
<img src="oversim.common.BaseOverlay-type.png" ismap="yes" usemap="#type-diagram"/><map name="type-diagram">
<area shape="rect" href="oversim.common.BaseOverlay.html" title="BaseOverlay" alt="BaseOverlay" coords="0,0,117,40">
</map>
<h3 class="subtitle">Usage diagram:</h3>
<p>The following diagram shows usage relationships between types.
Unresolved types are missing from the diagram.
Click <a href="full-ned-usage-diagram.html">here</a> to see the full picture.</p>
<img src="oversim.common.BaseOverlay-usage.png" ismap="yes" usemap="#usage-diagram"/><map name="usage-diagram"><area shape="rect" id="node1" href="oversim.common.BaseOverlay.html" title="Simple Module BaseOverlay" alt="" coords="5,6,101,34">
</map>
<h3 class="subtitle">Inheritance diagram:</h3>
<p>The following diagram shows inheritance relationships for this type.
Unresolved types are missing from the diagram.
Click <a href="full-ned-inheritance-diagram.html">here</a> to see the full picture.</p>
<img src="oversim.common.BaseOverlay-inheritance.png" ismap="yes" usemap="#inheritance-diagram"/><map name="inheritance-diagram"><area shape="rect" id="node1" href="oversim.common.BaseOverlay.html" title="Simple Module BaseOverlay" alt="" coords="648,83,744,111">
<area shape="rect" id="node4" href="oversim.overlay.pastry.BasePastry.html" title="Simple Module BasePastry" alt="" coords="5,161,96,189">
<area shape="rect" id="node6" href="oversim.overlay.broose.Broose.html" title="Simple Module Broose" alt="" coords="120,161,192,189">
<area shape="rect" id="node8" href="oversim.overlay.chord.Chord.html" title="Simple Module Chord" alt="" coords="216,161,288,189">
<area shape="rect" id="node10" href="oversim.overlay.gia.Gia.html" title="Simple Module Gia" alt="" coords="312,161,384,189">
<area shape="rect" id="node12" href="oversim.overlay.kademlia.Kademlia.html" title="Simple Module Kademlia" alt="" coords="408,161,483,189">
<area shape="rect" id="node14" href="oversim.overlay.koorde.Koorde.html" title="Simple Module Koorde" alt="" coords="507,161,579,189">
<area shape="rect" id="node16" href="oversim.overlay.myoverlay.MyOverlay.html" title="Simple Module MyOverlay" alt="" coords="603,161,688,189">
<area shape="rect" id="node18" href="oversim.overlay.nice.Nice.html" title="Simple Module Nice" alt="" coords="712,161,784,189">
<area shape="rect" id="node20" href="oversim.overlay.ntree.NTree.html" title="Simple Module NTree" alt="" coords="808,161,880,189">
<area shape="rect" id="node22" href="oversim.applications.i3.OverlayDummy.html" title="Simple Module OverlayDummy" alt="" coords="904,161,1016,189">
<area shape="rect" id="node24" href="oversim.overlay.pubsubmmog.PubSubLobby.html" title="Simple Module PubSubLobby" alt="" coords="1040,161,1141,189">
<area shape="rect" id="node26" href="oversim.overlay.pubsubmmog.PubSubMMOG.html" title="Simple Module PubSubMMOG" alt="" coords="1165,161,1275,189">
<area shape="rect" id="node28" href="oversim.overlay.quon.Quon.html" title="Simple Module Quon" alt="" coords="1299,161,1371,189">
<area shape="rect" id="node30" href="oversim.overlay.vast.Vast.html" title="Simple Module Vast" alt="" coords="1395,161,1467,189">
<area shape="rect" id="node2" href="oversim.common.BaseRpc.html" title="Simple Module BaseRpc" alt="" coords="659,6,733,34">
</map>
<h3 class="subtitle">Extends:</h3>
<table>
<tr>
   <td>
      <a href="oversim.common.BaseRpc.html">BaseRpc</a>
      <i> (simple&nbsp;module)</i>
   </td>
   <td>

<p>Base module for simple RPC communication</p>
   </td>
</tr>
</table>
<h3 class="subtitle">Known subclasses:</h3>
<table>
<tr>
   <td>
      <a href="oversim.overlay.pastry.BasePastry.html">BasePastry</a>
      <i> (simple&nbsp;module)</i>
   </td>
   <td>
<i>(no description)</i>
   </td>
</tr>
<tr>
   <td>
      <a href="oversim.overlay.broose.Broose.html">Broose</a>
      <i> (simple&nbsp;module)</i>
   </td>
   <td>

<p>The main module of the <a href="oversim.overlay.broose.Broose.html">Broose</a> implementation</p>
   </td>
</tr>
<tr>
   <td>
      <a href="oversim.overlay.chord.Chord.html">Chord</a>
      <i> (simple&nbsp;module)</i>
   </td>
   <td>

<p>The main module of the <a href="oversim.overlay.chord.Chord.html">Chord</a> implementation</p>
   </td>
</tr>
<tr>
   <td>
      <a href="oversim.overlay.gia.Gia.html">Gia</a>
      <i> (simple&nbsp;module)</i>
   </td>
   <td>

<p>The main module of the GIA implementation</p>
<p><b>Author:</b> Robert Palmer</p>
   </td>
</tr>
<tr>
   <td>
      <a href="oversim.overlay.kademlia.Kademlia.html">Kademlia</a>
      <i> (simple&nbsp;module)</i>
   </td>
   <td>

<p>The main module of the <a href="oversim.overlay.kademlia.Kademlia.html">Kademlia</a> implementation</p>
   </td>
</tr>
<tr>
   <td>
      <a href="oversim.overlay.koorde.Koorde.html">Koorde</a>
      <i> (simple&nbsp;module)</i>
   </td>
   <td>

<p>The main module of the <a href="oversim.overlay.koorde.Koorde.html">Koorde</a> implementation</p>
   </td>
</tr>
<tr>
   <td>
      <a href="oversim.overlay.myoverlay.MyOverlay.html">MyOverlay</a>
      <i> (simple&nbsp;module)</i>
   </td>
   <td>
<i>(no description)</i>
   </td>
</tr>
<tr>
   <td>
      <a href="oversim.overlay.nice.Nice.html">Nice</a>
      <i> (simple&nbsp;module)</i>
   </td>
   <td>

<p>The main module of the NICE implementation</p>
   </td>
</tr>
<tr>
   <td>
      <a href="oversim.overlay.ntree.NTree.html">NTree</a>
      <i> (simple&nbsp;module)</i>
   </td>
   <td>
<i>(no description)</i>
   </td>
</tr>
<tr>
   <td>
      <a href="oversim.applications.i3.OverlayDummy.html">OverlayDummy</a>
      <i> (simple&nbsp;module)</i>
   </td>
   <td>
<i>(no description)</i>
   </td>
</tr>
<tr>
   <td>
      <a href="oversim.overlay.pubsubmmog.PubSubLobby.html">PubSubLobby</a>
      <i> (simple&nbsp;module)</i>
   </td>
   <td>
<i>(no description)</i>
   </td>
</tr>
<tr>
   <td>
      <a href="oversim.overlay.pubsubmmog.PubSubMMOG.html">PubSubMMOG</a>
      <i> (simple&nbsp;module)</i>
   </td>
   <td>
<i>(no description)</i>
   </td>
</tr>
<tr>
   <td>
      <a href="oversim.overlay.quon.Quon.html">Quon</a>
      <i> (simple&nbsp;module)</i>
   </td>
   <td>
<i>(no description)</i>
   </td>
</tr>
<tr>
   <td>
      <a href="oversim.overlay.vast.Vast.html">Vast</a>
      <i> (simple&nbsp;module)</i>
   </td>
   <td>
<i>(no description)</i>
   </td>
</tr>
</table>
<h3 class="subtitle">Parameters:</h3>
<table class="paramtable">
   <tr>
      <th>Name</th>
      <th>Type</th>
      <th>Default value</th>
      <th>Description</th>
   </tr>
<tr class="inherited">
   <td width="150">rpcUdpTimeout</td>
   <td width="100">
      <i>double</i>
   </td>
   <td width="120"></td>
   <td>
<p>default timeout value for direct RPCs</p>
   </td>
</tr>
<tr class="inherited">
   <td width="150">rpcKeyTimeout</td>
   <td width="100">
      <i>double</i>
   </td>
   <td width="120"></td>
   <td>
<p>default timeout value for routed RPCs</p>
   </td>
</tr>
<tr class="inherited">
   <td width="150">optimizeTimeouts</td>
   <td width="100">
      <i>bool</i>
   </td>
   <td width="120"></td>
   <td>
<p>calculate timeouts from measured RTTs
and network coordinates</p>
   </td>
</tr>
<tr class="inherited">
   <td width="150">rpcExponentialBackoff</td>
   <td width="100">
      <i>bool</i>
   </td>
   <td width="120"></td>
   <td>
<p>if true, doubles the timeout for
every retransmission</p>
   </td>
</tr>
<tr class="local">
   <td width="150">localPort</td>
   <td width="100">
      <i>int</i>
   </td>
   <td width="120"></td>
   <td>
<p>UDP port for overlay messages</p>
   </td>
</tr>
<tr class="local">
   <td width="150">debugOutput</td>
   <td width="100">
      <i>bool</i>
   </td>
   <td width="120"></td>
   <td>
<p>enable debug output</p>
   </td>
</tr>
<tr class="local">
   <td width="150">keyLength</td>
   <td width="100">
      <i>int</i>
   </td>
   <td width="120"></td>
   <td>
<p>overlay key length in bits</p>
   </td>
</tr>
<tr class="local">
   <td width="150">nodeId</td>
   <td width="100">
      <i>string</i>
   </td>
   <td width="120"></td>
   <td>
<p>optional nodeId as string in hexadecimal notation</p>
   </td>
</tr>
<tr class="local">
   <td width="150">useCommonAPIforward</td>
   <td width="100">
      <i>bool</i>
   </td>
   <td width="120"></td>
   <td>
<p>enable CommonAPI forward() calls</p>
   </td>
</tr>
<tr class="local">
   <td width="150">drawOverlayTopology</td>
   <td width="100">
      <i>bool</i>
   </td>
   <td width="120"></td>
   <td>
<p>draw arrow to successor node?</p>
   </td>
</tr>
<tr class="local">
   <td width="150">hopCountMax</td>
   <td width="100">
      <i>int</i>
   </td>
   <td width="120"></td>
   <td>
<p>maximum number of overlay hops</p>
   </td>
</tr>
<tr class="local">
   <td width="150">recNumRedundantNodes</td>
   <td width="100">
      <i>int</i>
   </td>
   <td width="120"></td>
   <td>
<p>numRedundantNodes for recursive routing</p>
   </td>
</tr>
<tr class="local">
   <td width="150">joinOnApplicationRequest</td>
   <td width="100">
      <i>bool</i>
   </td>
   <td width="120"></td>
   <td>
<p>only join the overlay on application request</p>
   </td>
</tr>
<tr class="local">
   <td width="150">collectPerHopDelay</td>
   <td width="100">
      <i>bool</i>
   </td>
   <td width="120"></td>
   <td>
<p>delay statistics for single hops</p>
   </td>
</tr>
<tr class="local">
   <td width="150">routeMsgAcks</td>
   <td width="100">
      <i>bool</i>
   </td>
   <td width="120"></td>
   <td>
<p>use RPCs for route messages</p>
   </td>
</tr>
<tr class="local">
   <td width="150">lookupRedundantNodes</td>
   <td width="100">
      <i>int</i>
   </td>
   <td width="120"></td>
   <td>
<p>number of next hops in each step</p>
   </td>
</tr>
<tr class="local">
   <td width="150">lookupParallelPaths</td>
   <td width="100">
      <i>int</i>
   </td>
   <td width="120"></td>
   <td>
<p>number of parallel paths</p>
   </td>
</tr>
<tr class="local">
   <td width="150">lookupParallelRpcs</td>
   <td width="100">
      <i>int</i>
   </td>
   <td width="120"></td>
   <td>
<p>number of nodes to ask in parallel</p>
   </td>
</tr>
<tr class="local">
   <td width="150">lookupVerifySiblings</td>
   <td width="100">
      <i>bool</i>
   </td>
   <td width="120"></td>
   <td>
<p>true, if siblings need to be authenticated with a ping</p>
   </td>
</tr>
<tr class="local">
   <td width="150">lookupMajoritySiblings</td>
   <td width="100">
      <i>bool</i>
   </td>
   <td width="120"></td>
   <td>
<p>true, if sibling candidates are selected by a majority decision if using parallel paths</p>
   </td>
</tr>
<tr class="local">
   <td width="150">lookupMerge</td>
   <td width="100">
      <i>bool</i>
   </td>
   <td width="120"></td>
   <td>
<p>true, if parallel Rpc results should be merged</p>
   </td>
</tr>
<tr class="local">
   <td width="150">lookupFailedNodeRpcs</td>
   <td width="100">
      <i>bool</i>
   </td>
   <td width="120"></td>
   <td>
<p>communicate failed nodes</p>
   </td>
</tr>
<tr class="local">
   <td width="150">lookupStrictParallelRpcs</td>
   <td width="100">
      <i>bool</i>
   </td>
   <td width="120"></td>
   <td>
<p>limited the number of concurrent rpcs to parameter parallelRpcs</p>
   </td>
</tr>
<tr class="local">
   <td width="150">lookupUseAllParallelResponses</td>
   <td width="100">
      <i>bool</i>
   </td>
   <td width="120"></td>
   <td>
<p>merge all parallel responses from earlier steps</p>
   </td>
</tr>
<tr class="local">
   <td width="150">lookupNewRpcOnEveryTimeout</td>
   <td width="100">
      <i>bool</i>
   </td>
   <td width="120"></td>
   <td>
<p>send a new RPC immediately after an RPC timeouts</p>
   </td>
</tr>
<tr class="local">
   <td width="150">lookupNewRpcOnEveryResponse</td>
   <td width="100">
      <i>bool</i>
   </td>
   <td width="120"></td>
   <td>
<p>send a new RPC after every response, even if there was no progress</p>
   </td>
</tr>
<tr class="local">
   <td width="150">lookupFinishOnFirstUnchanged</td>
   <td width="100">
      <i>bool</i>
   </td>
   <td width="120"></td>
   <td>
<p>finish lookup, if the last pending RPC returned without progress</p>
   </td>
</tr>
<tr class="local">
   <td width="150">lookupVisitOnlyOnce</td>
   <td width="100">
      <i>bool</i>
   </td>
   <td width="120"></td>
   <td>
<p>if true, the same node is never asked twice during a single lookup</p>
   </td>
</tr>
<tr class="local">
   <td width="150">lookupAcceptLateSiblings</td>
   <td width="100">
      <i>bool</i>
   </td>
   <td width="120"></td>
   <td>
<p>if true, a <a href="FindNodeResponse.html">FindNodeResponse</a> with sibling flag set is always accepted, even if it is from a previous lookup step</p>
   </td>
</tr>
<tr class="local">
   <td width="150">routingType</td>
   <td width="100">
      <i>string</i>
   </td>
   <td width="120"></td>
   <td>
<p>default routing mode (iterative, semi-recursive,...)</p>
   </td>
</tr>
<tr class="local">
   <td width="150">rejoinOnFailure</td>
   <td width="100">
      <i>bool</i>
   </td>
   <td width="120"></td>
   <td>
<p>rejoin after loosing connection to the overlay?</p>
   </td>
</tr>
<tr class="local">
   <td width="150">sendRpcResponseToLastHop</td>
   <td width="100">
      <i>bool</i>
   </td>
   <td width="120"></td>
   <td>
<p>needed by KBR protocols for NAT support</p>
   </td>
</tr>
<tr class="local">
   <td width="150">recordRoute</td>
   <td width="100">
      <i>bool</i>
   </td>
   <td width="120"></td>
   <td>
<p>record visited hops on route</p>
   </td>
</tr>
<tr class="local">
   <td width="150">dropFindNodeAttack</td>
   <td width="100">
      <i>bool</i>
   </td>
   <td width="120"></td>
   <td>
<p>if node is malicious, it tries a findNode attack</p>
   </td>
</tr>
<tr class="local">
   <td width="150">isSiblingAttack</td>
   <td width="100">
      <i>bool</i>
   </td>
   <td width="120"></td>
   <td>
<p>if node is malicious, it tries a isSibling attack</p>
   </td>
</tr>
<tr class="local">
   <td width="150">invalidNodesAttack</td>
   <td width="100">
      <i>bool</i>
   </td>
   <td width="120"></td>
   <td>
<p>if node is malicious, it tries a invalidNode attack</p>
   </td>
</tr>
<tr class="local">
   <td width="150">dropRouteMessageAttack</td>
   <td width="100">
      <i>bool</i>
   </td>
   <td width="120"></td>
   <td>
<p>if node is malicious, it drops all received BaseRouteMessages</p>
   </td>
</tr>
<tr class="local">
   <td width="150">measureAuthBlock</td>
   <td width="100">
      <i>bool</i>
   </td>
   <td width="120"></td>
   <td>
<p>if true, measure the overhead of signatures in rpc messages</p>
   </td>
</tr>
<tr class="local">
   <td width="150">restoreContext</td>
   <td width="100">
      <i>bool</i>
   </td>
   <td width="120"></td>
   <td>
<p>if true, a node rejoins with its old nodeId and malicious state</p>
   </td>
</tr>
</table>
<h3 class="subtitle">Properties:</h3>
<table class="paramtable">
   <tr>
      <th>Name</th>
      <th>Value</th>
      <th>Description</th>
   </tr>
<tr>
   <td width="150">class</td>
   <td width="100"><i>BaseOverlay</i></td>
   <td></td>
</tr>
<tr>
   <td width="150">display</td>
   <td width="100"><i>i=block/circle</i></td>
   <td></td>
</tr>
</table>
<h3 class="subtitle">Gates:</h3>
<table class="paramtable">
   <tr>
      <th>Name</th>
      <th>Direction</th>
      <th>Size</th>
      <th>Description</th>
   </tr>
<tr class="local">
   <td width="150">udpIn</xsl:if></td>
   <td width="100"><i>input</i></td>
   <td width="50"></td>   <td>
<p>gate from the UDP layer</p>
</td>
</tr>
<tr class="local">
   <td width="150">udpOut</xsl:if></td>
   <td width="100"><i>output</i></td>
   <td width="50"></td>   <td>
<p>gate to the UDP layer</p>
</td>
</tr>
<tr class="local">
   <td width="150">tcpIn</xsl:if></td>
   <td width="100"><i>input</i></td>
   <td width="50"></td>   <td>
<p>gate from the TCP layer</p>
</td>
</tr>
<tr class="local">
   <td width="150">tcpOut</xsl:if></td>
   <td width="100"><i>output</i></td>
   <td width="50"></td>   <td>
<p>gate to the TCP layer</p>
</td>
</tr>
<tr class="local">
   <td width="150">appIn</xsl:if></td>
   <td width="100"><i>input</i></td>
   <td width="50"></td>   <td>
<p>gate from the application</p>
</td>
</tr>
<tr class="local">
   <td width="150">appOut</xsl:if></td>
   <td width="100"><i>output</i></td>
   <td width="50"></td>   <td>
<p>gate to the application</p>
</td>
</tr>
<tr class="local">
   <td width="150">direct_in</xsl:if></td>
   <td width="100"><i>input</i></td>
   <td width="50"></td>   <td>
<p>gate for sendDirect</p>
</td>
</tr>
</table>
<h3 class="subtitle">Source code:</h3>
<pre class="src"><span style="color: #808080; font-style: italic; ">//
// Base class for overlay implementations
//
// </span><span style="color: #000080; ">@author</span><span style="color: #808080; font-style: italic; "> Ingmar Baumgart, Bernhard Heep, Stephan Krause, Sebastian Mies
//
</span><span style="color: #800000; font-weight: bold; ">simple</span><span style="color: #000000; "> </span><span style="color: #000000; ">BaseOverlay</span><span style="color: #000000; "> </span><span style="color: #800000; font-weight: bold; ">extends</span><span style="color: #000000; "> </span><span style="color: #000000; ">BaseRpc</span><span style="color: #000000; ">
{
    </span><span style="color: #800000; font-weight: bold; ">parameters</span><span style="color: #000000; ">:
        </span><span style="color: #000000; font-weight: bold; ">@class</span><span style="color: #000000; ">(</span><span style="color: #000000; ">BaseOverlay</span><span style="color: #000000; ">);
        </span><span style="color: #000000; font-weight: bold; ">@display</span><span style="color: #000000; ">(</span><span style="color: #008000; ">&quot;i=block/circle&quot;</span><span style="color: #000000; ">);
        </span><span style="color: #000080; font-weight: bold; ">int</span><span style="color: #000000; "> </span><span style="color: #000000; ">localPort</span><span style="color: #000000; ">; </span><span style="color: #808080; font-style: italic; ">// UDP port for overlay messages
</span><span style="color: #000000; ">        </span><span style="color: #000080; font-weight: bold; ">bool</span><span style="color: #000000; "> </span><span style="color: #000000; ">debugOutput</span><span style="color: #000000; ">; </span><span style="color: #808080; font-style: italic; ">// enable debug output
</span><span style="color: #000000; ">        </span><span style="color: #000080; font-weight: bold; ">int</span><span style="color: #000000; "> </span><span style="color: #000000; ">keyLength</span><span style="color: #000000; ">; </span><span style="color: #808080; font-style: italic; ">// overlay key length in bits
</span><span style="color: #000000; ">        </span><span style="color: #000080; font-weight: bold; ">string</span><span style="color: #000000; "> </span><span style="color: #000000; ">nodeId</span><span style="color: #000000; ">; </span><span style="color: #808080; font-style: italic; ">// optional nodeId as string in hexadecimal notation 
</span><span style="color: #000000; ">        </span><span style="color: #000080; font-weight: bold; ">bool</span><span style="color: #000000; "> </span><span style="color: #000000; ">useCommonAPIforward</span><span style="color: #000000; ">; </span><span style="color: #808080; font-style: italic; ">// enable CommonAPI forward() calls
</span><span style="color: #000000; ">        </span><span style="color: #000080; font-weight: bold; ">bool</span><span style="color: #000000; "> </span><span style="color: #000000; ">drawOverlayTopology</span><span style="color: #000000; ">; </span><span style="color: #808080; font-style: italic; ">// draw arrow to successor node?
</span><span style="color: #000000; ">        </span><span style="color: #000080; font-weight: bold; ">int</span><span style="color: #000000; "> </span><span style="color: #000000; ">hopCountMax</span><span style="color: #000000; ">; </span><span style="color: #808080; font-style: italic; ">// maximum number of overlay hops
</span><span style="color: #000000; ">        </span><span style="color: #000080; font-weight: bold; ">int</span><span style="color: #000000; "> </span><span style="color: #000000; ">recNumRedundantNodes</span><span style="color: #000000; ">; </span><span style="color: #808080; font-style: italic; ">// numRedundantNodes for recursive routing
</span><span style="color: #000000; ">        </span><span style="color: #000080; font-weight: bold; ">bool</span><span style="color: #000000; "> </span><span style="color: #000000; ">joinOnApplicationRequest</span><span style="color: #000000; ">; </span><span style="color: #808080; font-style: italic; ">// only join the overlay on application request
</span><span style="color: #000000; ">        </span><span style="color: #000080; font-weight: bold; ">bool</span><span style="color: #000000; "> </span><span style="color: #000000; ">collectPerHopDelay</span><span style="color: #000000; ">; </span><span style="color: #808080; font-style: italic; ">// delay statistics for single hops
</span><span style="color: #000000; ">        </span><span style="color: #000080; font-weight: bold; ">bool</span><span style="color: #000000; "> </span><span style="color: #000000; ">routeMsgAcks</span><span style="color: #000000; ">; </span><span style="color: #808080; font-style: italic; ">// use RPCs for route messages
</span><span style="color: #000000; ">        </span><span style="color: #000080; font-weight: bold; ">int</span><span style="color: #000000; "> </span><span style="color: #000000; ">lookupRedundantNodes</span><span style="color: #000000; ">; </span><span style="color: #808080; font-style: italic; ">// number of next hops in each step
</span><span style="color: #000000; ">        </span><span style="color: #000080; font-weight: bold; ">int</span><span style="color: #000000; "> </span><span style="color: #000000; ">lookupParallelPaths</span><span style="color: #000000; ">; </span><span style="color: #808080; font-style: italic; ">// number of parallel paths
</span><span style="color: #000000; ">        </span><span style="color: #000080; font-weight: bold; ">int</span><span style="color: #000000; "> </span><span style="color: #000000; ">lookupParallelRpcs</span><span style="color: #000000; ">; </span><span style="color: #808080; font-style: italic; ">// number of nodes to ask in parallel      
</span><span style="color: #000000; ">        </span><span style="color: #000080; font-weight: bold; ">bool</span><span style="color: #000000; "> </span><span style="color: #000000; ">lookupVerifySiblings</span><span style="color: #000000; ">; </span><span style="color: #808080; font-style: italic; ">//true, if siblings need to be authenticated with a ping
</span><span style="color: #000000; ">        </span><span style="color: #000080; font-weight: bold; ">bool</span><span style="color: #000000; "> </span><span style="color: #000000; ">lookupMajoritySiblings</span><span style="color: #000000; ">; </span><span style="color: #808080; font-style: italic; ">// true, if sibling candidates are selected by a majority decision if using parallel paths  
</span><span style="color: #000000; ">        </span><span style="color: #000080; font-weight: bold; ">bool</span><span style="color: #000000; "> </span><span style="color: #000000; ">lookupMerge</span><span style="color: #000000; ">; </span><span style="color: #808080; font-style: italic; ">// true, if parallel Rpc results should be merged
</span><span style="color: #000000; ">        </span><span style="color: #000080; font-weight: bold; ">bool</span><span style="color: #000000; "> </span><span style="color: #000000; ">lookupFailedNodeRpcs</span><span style="color: #000000; ">; </span><span style="color: #808080; font-style: italic; ">// communicate failed nodes
</span><span style="color: #000000; ">        </span><span style="color: #000080; font-weight: bold; ">bool</span><span style="color: #000000; "> </span><span style="color: #000000; ">lookupStrictParallelRpcs</span><span style="color: #000000; ">; </span><span style="color: #808080; font-style: italic; ">// limited the number of concurrent rpcs to parameter parallelRpcs
</span><span style="color: #000000; ">        </span><span style="color: #000080; font-weight: bold; ">bool</span><span style="color: #000000; "> </span><span style="color: #000000; ">lookupUseAllParallelResponses</span><span style="color: #000000; ">; </span><span style="color: #808080; font-style: italic; ">// merge all parallel responses from earlier steps
</span><span style="color: #000000; ">        </span><span style="color: #000080; font-weight: bold; ">bool</span><span style="color: #000000; "> </span><span style="color: #000000; ">lookupNewRpcOnEveryTimeout</span><span style="color: #000000; ">; </span><span style="color: #808080; font-style: italic; ">// send a new RPC immediately after an RPC timeouts
</span><span style="color: #000000; ">        </span><span style="color: #000080; font-weight: bold; ">bool</span><span style="color: #000000; "> </span><span style="color: #000000; ">lookupNewRpcOnEveryResponse</span><span style="color: #000000; ">; </span><span style="color: #808080; font-style: italic; ">// send a new RPC after every response, even if there was no progress
</span><span style="color: #000000; ">        </span><span style="color: #000080; font-weight: bold; ">bool</span><span style="color: #000000; "> </span><span style="color: #000000; ">lookupFinishOnFirstUnchanged</span><span style="color: #000000; ">; </span><span style="color: #808080; font-style: italic; ">// finish lookup, if the last pending RPC returned without progress    
</span><span style="color: #000000; ">        </span><span style="color: #000080; font-weight: bold; ">bool</span><span style="color: #000000; "> </span><span style="color: #000000; ">lookupVisitOnlyOnce</span><span style="color: #000000; ">; </span><span style="color: #808080; font-style: italic; ">// if true, the same node is never asked twice during a single lookup
</span><span style="color: #000000; ">        </span><span style="color: #000080; font-weight: bold; ">bool</span><span style="color: #000000; "> </span><span style="color: #000000; ">lookupAcceptLateSiblings</span><span style="color: #000000; ">; </span><span style="color: #808080; font-style: italic; ">// if true, a FindNodeResponse with sibling flag set is always accepted, even if it is from a previous lookup step
</span><span style="color: #000000; ">        </span><span style="color: #000080; font-weight: bold; ">string</span><span style="color: #000000; "> </span><span style="color: #000000; ">routingType</span><span style="color: #000000; ">; </span><span style="color: #808080; font-style: italic; ">// default routing mode (iterative, semi-recursive,...)
</span><span style="color: #000000; ">        </span><span style="color: #000080; font-weight: bold; ">bool</span><span style="color: #000000; "> </span><span style="color: #000000; ">rejoinOnFailure</span><span style="color: #000000; ">; </span><span style="color: #808080; font-style: italic; ">// rejoin after loosing connection to the overlay?
</span><span style="color: #000000; ">        </span><span style="color: #000080; font-weight: bold; ">bool</span><span style="color: #000000; "> </span><span style="color: #000000; ">sendRpcResponseToLastHop</span><span style="color: #000000; ">; </span><span style="color: #808080; font-style: italic; ">// needed by KBR protocols for NAT support
</span><span style="color: #000000; ">        </span><span style="color: #000080; font-weight: bold; ">bool</span><span style="color: #000000; "> </span><span style="color: #000000; ">recordRoute</span><span style="color: #000000; ">; </span><span style="color: #808080; font-style: italic; ">// record visited hops on route 
</span><span style="color: #000000; ">
        </span><span style="color: #000080; font-weight: bold; ">bool</span><span style="color: #000000; "> </span><span style="color: #000000; ">dropFindNodeAttack</span><span style="color: #000000; ">; </span><span style="color: #808080; font-style: italic; ">// if node is malicious, it tries a findNode attack
</span><span style="color: #000000; ">        </span><span style="color: #000080; font-weight: bold; ">bool</span><span style="color: #000000; "> </span><span style="color: #000000; ">isSiblingAttack</span><span style="color: #000000; ">; </span><span style="color: #808080; font-style: italic; ">// if node is malicious, it tries a isSibling attack
</span><span style="color: #000000; ">        </span><span style="color: #000080; font-weight: bold; ">bool</span><span style="color: #000000; "> </span><span style="color: #000000; ">invalidNodesAttack</span><span style="color: #000000; ">; </span><span style="color: #808080; font-style: italic; ">// if node is malicious, it tries a invalidNode attack
</span><span style="color: #000000; ">        </span><span style="color: #000080; font-weight: bold; ">bool</span><span style="color: #000000; "> </span><span style="color: #000000; ">dropRouteMessageAttack</span><span style="color: #000000; ">; </span><span style="color: #808080; font-style: italic; ">// if node is malicious, it drops all received BaseRouteMessages
</span><span style="color: #000000; ">        </span><span style="color: #000080; font-weight: bold; ">bool</span><span style="color: #000000; "> </span><span style="color: #000000; ">measureAuthBlock</span><span style="color: #000000; ">; </span><span style="color: #808080; font-style: italic; ">// if true, measure the overhead of signatures in rpc messages
</span><span style="color: #000000; ">        </span><span style="color: #000080; font-weight: bold; ">bool</span><span style="color: #000000; "> </span><span style="color: #000000; ">restoreContext</span><span style="color: #000000; ">; </span><span style="color: #808080; font-style: italic; ">// if true, a node rejoins with its old nodeId and malicious state
</span><span style="color: #000000; ">
    </span><span style="color: #800000; font-weight: bold; ">gates</span><span style="color: #000000; ">:
        </span><span style="color: #000080; font-weight: bold; ">input</span><span style="color: #000000; "> </span><span style="color: #000000; ">udpIn</span><span style="color: #000000; ">; </span><span style="color: #808080; font-style: italic; ">// gate from the UDP layer
</span><span style="color: #000000; ">        </span><span style="color: #000080; font-weight: bold; ">output</span><span style="color: #000000; "> </span><span style="color: #000000; ">udpOut</span><span style="color: #000000; ">; </span><span style="color: #808080; font-style: italic; ">// gate to the UDP layer
</span><span style="color: #000000; ">        </span><span style="color: #000080; font-weight: bold; ">input</span><span style="color: #000000; "> </span><span style="color: #000000; ">tcpIn</span><span style="color: #000000; ">; </span><span style="color: #808080; font-style: italic; ">// gate from the TCP layer
</span><span style="color: #000000; ">        </span><span style="color: #000080; font-weight: bold; ">output</span><span style="color: #000000; "> </span><span style="color: #000000; ">tcpOut</span><span style="color: #000000; ">; </span><span style="color: #808080; font-style: italic; ">// gate to the TCP layer
</span><span style="color: #000000; ">        </span><span style="color: #000080; font-weight: bold; ">input</span><span style="color: #000000; "> </span><span style="color: #000000; ">appIn</span><span style="color: #000000; ">; </span><span style="color: #808080; font-style: italic; ">// gate from the application
</span><span style="color: #000000; ">        </span><span style="color: #000080; font-weight: bold; ">output</span><span style="color: #000000; "> </span><span style="color: #000000; ">appOut</span><span style="color: #000000; ">; </span><span style="color: #808080; font-style: italic; ">// gate to the application
</span><span style="color: #000000; ">        </span><span style="color: #000080; font-weight: bold; ">input</span><span style="color: #000000; "> </span><span style="color: #000000; ">direct_in</span><span style="color: #000000; ">; </span><span style="color: #808080; font-style: italic; ">// gate for sendDirect
</span><span style="color: #000000; ">}

</span></pre>
   <hr><p class="footer"><a href="http://creativecommons.org/licenses/by-sa/3.0" target="_top"><img src="by-sa.png"></a> This documentation is released under the <a href="http://creativecommons.org/licenses/by-sa/3.0" target="_top">Creative Commons license</a></p>
   </body>
</html>
